package juego.main;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;
import javax.swing.JPanel;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

import juego.control.Personaje;
import juego.enemigo.Enemigo;
import juego.entidades.Entidad;
import juego.graficos.ElementoGrafico;
import juego.niveles.Nivel;
import juego.niveles.generator.CreatorByFile;
import juego.powerups.Moneda;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Juego extends javax.swing.JFrame {
	protected JPanel jPanel1;
	protected JLabel jLabel1;
	protected JLabel jLabel3;
	protected Personaje mario;
	protected JLabel jLabelPuntaje;
	protected JLabel jLabelVidas;
	protected boolean control=false;
	protected boolean controlUp=false;
	protected JLabel jLabel4;
	protected Nivel level;
	protected int up=0;
	protected JLabel jLabel2;
	protected static PlayerThread elReproductor=new PlayerThread("./music/Miku-Hatsune-Polka.mp3");

	
	public Juego() {
		super();
		initGUI();

	}
	
	private void initGUI() {
		try {
			
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			
			
			
			{
				jPanel1 = new JPanel();
				this.add(jPanel1);
				this.setResizable(false); //Permite que la ventana no se puede maximizar
				this.setDefaultCloseOperation(0);
				
				jPanel1.setLayout(null);
				
				this.addKeyListener(new KeyAdapter() {
					public void keyReleased(KeyEvent evt) {
						thisKeyReleased(evt);
					}
					public void keyPressed(KeyEvent evt) {
						thisKeyPressed(evt);
					}
					
				});				
							
				jPanel1.setSize(3200,500);
				jPanel1.setPreferredSize(new Dimension(3200,500));
				jPanel1.setBounds(0, 0, 9600, 600);
				jPanel1.setBackground(new Color(117, 178, 221));
				{
					jLabel1 = new JLabel();
					jPanel1.add(jLabel1);
					
					jLabel1.setBounds(0, 0, 3200, 600);
					jLabel1.setIcon(new ImageIcon(getClass().getClassLoader().getResource("cielo/FONDO.png")));
				}
			
				{
					jLabelVidas = new JLabel();
					jLabel1.add(jLabelVidas);
					jLabelVidas.setText("MARIO X    1");
					jLabelVidas.setForeground(new java.awt.Color(250,250,250));
					jLabelVidas.setFont(new java.awt.Font("AR DELANEY",0,36));
					
					jLabelVidas.setBounds(634, 26, 270, 30);
				}
				{
					jLabelPuntaje = new JLabel();
					jLabel1.add(jLabelPuntaje);
					jLabelPuntaje.setText("0");
					jLabelPuntaje.setBounds(300, 26, 200, 30);
					jLabelPuntaje.setForeground(new java.awt.Color(250,250,250));
					jLabelPuntaje.setFont(new java.awt.Font("AR DELANEY",0,30));
				}
			
			}
			
            loadLevel();
            
            
            mario=new Personaje(this,level,jLabel1);
			jLabel1.add(mario);
			mario.setBounds(544, 375, 49, 50);
			activarMalos();
			pack();
			setSize(3200, 500);
			 elReproductor.start();
			
		}
		
		
		
		catch (Exception e) {
		   e.printStackTrace();
		}
	}
	public Personaje damePersonaje(){
		return mario;}
	
	
	private void loadLevel()
	{
		CreatorByFile cbf= new CreatorByFile();
		level = cbf.getLevel();
		loadGraphicLevel( level );

	}
	public PlayerThread dameMiReproductor(){
		return elReproductor;
	}

	public JLabel getLabelPrincipal(){
		return jLabel1;
		}
	
	public void actualizarPuntaje(){
		jLabelPuntaje.setText(mario.mostrarPuntaje());
		
	}
	
	public void actualizarVidas(){
		jLabelVidas.setText("MARIO X    "+mario.mostrarVidas());
	}
	
	public void loadGraphicLevel( Nivel level )
	{
		for( int i = 0; i < 20; i++ )
		

		{
			for( int j = 0; j < 172; j++ )
			{
				Entidad e = level.getEntidad(i, j);
				if (e!=null){
					ElementoGrafico eg = e.getGrafico();
					eg.setLocation(j*32, i*32);
					this.jLabel1.add(eg);
				}
			}
		}
		
	
	}
	
	
private void activarMalos(){

	
	Entidad e1 = level.getEntidad(12,38);	
	if (e1.hayMalos()){
	Enemigo maldito1= e1.getMalos().get(0);
	maldito1.crearMovimiento(mario,level, jLabel1, 12, 38, e1);
	maldito1.iniciarMovimiento();
	}

	Entidad e2 = level.getEntidad(12,54);	
	if (e2.hayMalos()){
	Enemigo maldito2= e2.getMalos().get(0);
	maldito2.crearMovimiento(mario,level, jLabel1, 12, 54, e2);
	maldito2.iniciarMovimiento();
	}
}

private void thisKeyPressed(KeyEvent evt) {
	if (evt.getKeyCode() == KeyEvent.VK_SPACE){
		mario.disparar();
	}
	
if (evt.getKeyCode() == KeyEvent.VK_RIGHT){
	if (!controlUp){
		control=true;
	if(	mario.puedoIrDerecha()){
		mario.derecha();
		mario.caer();
		jLabelVidas.setLocation(jLabelVidas.getLocation().x+32, jLabelVidas.getLocation().y);
		jLabelPuntaje.setLocation(jLabelPuntaje.getLocation().x+32, jLabelPuntaje.getLocation().y);
		}
	}

	else {
		int oldy=mario.miCaract().dameYtuya();
		mario.saltarDerecha();
		int newy=mario.miCaract().dameYtuya();
		jLabelVidas.setLocation(jLabelVidas.getLocation().x+((newy-oldy)*32), jLabelVidas.getLocation().y);
		jLabelPuntaje.setLocation(jLabelPuntaje.getLocation().x+((newy-oldy)*32), jLabelPuntaje.getLocation().y);
				
	}
	
	

}

if (evt.getKeyCode() == KeyEvent.VK_LEFT){
	
	if (!controlUp){	
		control=true;
		if (mario.puedoIrIzquierda()){
			mario.izquierda();
			mario.caer();
			jLabelVidas.setLocation(jLabelVidas.getLocation().x-32, jLabelVidas.getLocation().y);
			jLabelPuntaje.setLocation(jLabelPuntaje.getLocation().x-32, jLabelPuntaje.getLocation().y);
			
		}
	}
	else {  int oldy=mario.miCaract().dameYtuya();
			mario.saltarIzquierda();
			int newy=mario.miCaract().dameYtuya();
			jLabelVidas.setLocation(jLabelVidas.getLocation().x-((oldy-newy)*32), jLabelVidas.getLocation().y);
			jLabelPuntaje.setLocation(jLabelPuntaje.getLocation().x-((oldy-newy)*32), jLabelPuntaje.getLocation().y);
		}
	
	}
		
if (evt.getKeyCode() == KeyEvent.VK_UP){
	

	if ( !controlUp){
		control=true;
		controlUp=true;
		mario.saltar();
				
		}
	

		}
		
		
if (evt.getKeyCode() == KeyEvent.VK_DOWN){
		if (!control){
		 	mario.agachado();
	        control=true;
		}
}
		

	
}


private void thisKeyReleased (KeyEvent evt){
	if (evt.getKeyCode() == KeyEvent.VK_SPACE){
		mario.quieto();
		
}	
if (evt.getKeyCode() == KeyEvent.VK_RIGHT){
		mario.quieto();
		control=false;
		controlUp=false;
}
	
if (evt.getKeyCode() == KeyEvent.VK_LEFT){
		mario.quieto();
		control=false;
		controlUp=false;
		}
	
if (evt.getKeyCode() == KeyEvent.VK_UP){
		mario.quieto();
		controlUp=false;
		control=false;
        mario.caer();
	}
	
	
if (evt.getKeyCode() == KeyEvent.VK_DOWN){
		mario.quieto();
		control=false;
		}
}



}
